#ifndef USER_H
#define USER_H

#include <QString>
#include <QDateTime>

/**
 * @brief 用户表实体类
 *
 * 该类对应数据库中的用户表，用于存储系统用户的基础信息，
 * 包括用户名、邮箱、密码及时间戳等核心属性，
 * 提供标准化的访问方法以实现用户信息的安全管理。
 */
class User
{
private:
    int id;                     // 主键ID，唯一标识一个用户
    QString username;           // 用户名，用于用户登录和身份标识
    QString email;              // 邮箱地址，用于账号验证和通知
    QString password;           // 密码（建议存储加密后的字符串）
    QDateTime create_time;      // 创建时间，记录用户账号的注册时间戳
    QDateTime update_time;      // 更新时间，记录用户信息最后修改的时间戳

public:
    /**
     * @brief 无参构造函数
     *
     * 初始化ID为0，字符串属性为空，时间戳为默认值，
     * 适合需要后续通过setter方法设置用户信息的场景。
     */
    User() : id(0) {}

    /**
     * @brief 全参数构造函数
     *
     * 一次性初始化所有属性，适合从数据库读取用户记录后直接创建对象。
     *
     * @param id            用户ID
     * @param username      用户名
     * @param email         邮箱地址
     * @param password      加密后的密码
     * @param create_time   账号创建时间戳
     * @param update_time   信息最后更新时间戳
     */
    User(int id,
         const QString& username,
         const QString& email,
         const QString& password,
         const QDateTime& create_time,
         const QDateTime& update_time)
        : id(id),
          username(username),
          email(email),
          password(password),
          create_time(create_time),
          update_time(update_time)
    {}

    // -------------------------- Getter 方法 --------------------------

    /**
     * @brief 获取用户ID
     * @return 用户的主键ID
     */
    int get_id() const { return id; }

    /**
     * @brief 获取用户名
     * @return 用户的登录用户名
     */
    QString get_username() const { return username; }

    /**
     * @brief 获取邮箱地址
     * @return 用户的注册邮箱
     */
    QString get_email() const { return email; }

    /**
     * @brief 获取密码
     * @return 加密后的用户密码字符串
     */
    QString get_password() const { return password; }

    /**
     * @brief 获取账号创建时间
     * @return 用户注册时的时间戳
     */
    QDateTime get_create_time() const { return create_time; }

    /**
     * @brief 获取信息最后更新时间
     * @return 用户信息最后修改的时间戳
     */
    QDateTime get_update_time() const { return update_time; }

    // -------------------------- Setter 方法 --------------------------

    /**
     * @brief 设置用户ID
     * @param value 新的用户ID
     */
    void set_id(int value) { id = value; }

    /**
     * @brief 设置用户名
     * @param value 新的用户名
     */
    void set_username(const QString& value) { username = value; }

    /**
     * @brief 设置邮箱地址
     * @param value 新的邮箱地址
     */
    void set_email(const QString& value) { email = value; }

    /**
     * @brief 设置密码
     * @param value 加密后的新密码
     */
    void set_password(const QString& value) { password = value; }

    /**
     * @brief 设置账号创建时间
     * @param value 新的创建时间戳
     */
    void set_create_time(const QDateTime& value) { create_time = value; }

    /**
     * @brief 设置信息最后更新时间
     * @param value 新的更新时间戳
     */
    void set_update_time(const QDateTime& value) { update_time = value; }
};

#endif // USER_H
